﻿#define _CRT_SECURE_NO_WARNINGS 1

//static 和 extern

//static 可以⽤来：
//• 修饰局部变量
//• 修饰全局变量
//• 修饰函数

////static修饰局部变量
//#include<stdio.h>
//
//void test1()
//{
//	int a = 3;
//	printf("%d ", a++);
//}
//
//void test2()
//{
//	static int a = 3;
//	printf("%d ", a++);
//}
//
//int main()
//{
//	int i = 0;
//	for (i = 0; i < 5; i++)
//	{
//		test1();
//	}
//	printf("\n");
//
//	for (i = 0; i < 5; i++)
//	{
//		test2();
//	}
//	printf("\n");
//	//static修饰局部变量改变了变量的⽣命周期
//	//存储在静态区的变量和全局变量是⼀样的，⽣命周期就和程序的⽣命周期⼀样了
//
//	return 0;
//}

//extern 是⽤来声明外部符号的，如果⼀个全局的符号在A⽂件中定义的，在B⽂件中想使⽤，就可以使⽤ extern 进⾏声明

////static修饰全局变量
//
//#include<stdio.h>
//
//
//void test1()
//{
//	extern int global;
//
//
//	int year = global;
//	printf("%d\n", year);
//}
//
////void test2() //编译的时候链接错误
////{
////	extern int s_global;
////
////
////	int num = s_global;
////	printf("%d\n", num);
////}
//
//int main()
//{
//	test1();
//
//	
//	return 0;
//}


////static 修饰函数
//#include<stdio.h>
//
//void test1()
//{
//	extern int add1(int x, int y);
//
//	printf("%d\n", add1(3, 4));
//
//}
//
////void test2()
////{
////	extern int add2(int x, int y);
////
////	printf("%d\n", add2(3, 4));
////
////}
//
//
//int main()
//{
//	test1();
//
//	return 0;
//}








//二分查找 - 函数实现

//写一个二分查找函数
//功能：在一个升序数组中查找指定的数值，找到了就返回下标，找不到就返回 - 1.
#include<stdio.h>

int bin_search(int arr[], int left, int right, int key)
{
	while (left <= right)
	{
		int mid = (left + right) / 2;

		if (arr[mid] < key)
			left = mid + 1;
		else if (arr[mid] > key)
			right = mid - 1;
		else
		{
			return mid;
		}
	}

	return -1;
}

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int key = 0;
	scanf("%d", &key);

	int len = sizeof(arr) / sizeof(int);

	int ret = bin_search(arr, 0, len - 1, key);

	printf("找到了,下标是:%d\n", ret);

	return 0;
}



